package com.personnel.service;

import com.personnel.common.Result;
import com.personnel.pojo.Staff;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 员工基本信息表(Staff)表服务接口类
 *
 * @author yuepeng
 * @since 2021-12-28 13:55:41
 * @version 1.0
 */
public interface StaffService {
    /**
     * 根据模糊条件查询总个数
     *
     * @param staffName 查询条件
     * @return 返回查询到的总个数
     */
    Map<String, Object> selectForCount(String staffName, int departmentId,  String category);

    /**
     * 查询所有数据
     * 
     * @return  返回所有数据
     */
    Result selectAll();

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Map<String, Object> selectById(String id);

    /**
     * 查询分页数据
     *
     * @param index 查询起始位置
     * @param staffName 查询条件
     * @return 对象列表
     */
    Map<String, Object> selectForPage(int index, int limit, String staffName, Integer departmentId,  String category);

    /**
     * 新增数据
     *
     * @param staff 实例对象
     * @return 实例对象
     */
    Result insert(Staff staff);

    /**
     * 通过ID查询单条数据
     *
     * @param staff 实例对象
     * @return 实例对象
     */
    Result updateById(Staff staff);
    /**
     * 通过ID查询单条数据
     *
     * @param staff 实例对象
     * @return 实例对象
     */
    Result updateSettingById(Staff staff, HttpSession session);

    /**
     * 通过ID查询单条数据
     *
     * @return 实例对象
     */
    Map<String, Object> updatePasswordById(String oldPassword,String newPassword,String staffId);

    Map<String, Object> updatePasswordByUuid(String uuid,String newPassword);


    /**
     * 通过主键删除数据
     *
     * @param staffId 主键
     * @return 是否成功
     */
    Map<String, Object> deleteById(String staffId);

    Map<String, Object> upload(MultipartFile file, HttpServletRequest request) throws IOException;

    Map<String, Object> insertHeadImg(MultipartFile file, HttpServletRequest request) throws IOException;

    Map<String, Object> sendCode(String phone);

    Map<String, Object> deleteByIds(String ids);

    List<Staff> selectForDepartment();
}